home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / list / List_Verify.c < prev    next >
C/C++ Source or Header  |  1992-11-11  |  3KB  |  90 lines

  1. /* 
  2.  * List_Verify.c --
  3.  *
  4.  *    Description.
  5.  *
  6.  * Copyright 1992 Regents of the University of California
  7.  * Permission to use, copy, modify, and distribute this
  8.  * software and its documentation for any purpose and without
  9.  * fee is hereby granted, provided that this copyright
  10.  * notice appears in all copies.  The University of California
  11.  * makes no representations about the suitability of this
  12.  * software for any purpose.  It is provided "as is" without
  13.  * express or implied warranty.
  14.  */
  15.  
  16. #ifndef lint
  17. static char rcsid[] = "$Header: /sprite/lib/forms/RCS/proto.c,v 1.6 92/03/02 15:29:56 bmiller Exp $ SPRITE (Berkeley)";
  18. #endif /* not lint */
  19.  
  20. #include "list.h"
  21.  
  22. #define LIST_NIL ((List_Links *) NIL)
  23.  
  24. /*
  25.  *----------------------------------------------------------------------
  26.  *
  27.  * List_Verify --
  28.  *
  29.  *    Verifies that the given list isn't corrupted. The descriptionPtr
  30.  *    should be at least 80 characters.
  31.  *
  32.  * Results:
  33.  *    SUCCESS if the list looks ok, FAILURE otherwise. If FAILURE is
  34.  *    returned then a description is returned in the descriptionPtr
  35.  *    array.
  36.  *
  37.  * Side effects:
  38.  *    None.
  39.  *
  40.  *----------------------------------------------------------------------
  41.  */
  42.  
  43. ReturnStatus
  44. List_Verify(headerPtr, descriptionPtr)
  45.     List_Links    *headerPtr;     /* Header of list to check. */
  46.     char    *descriptionPtr;/* Description of what went wrong. */
  47. {
  48.     List_Links    *itemPtr;
  49.     List_Links    *prevPtr;
  50.     List_Links    *nextPtr;
  51.     int        index;;
  52.  
  53.     if ((List_Prev(headerPtr) == LIST_NIL) || (List_Prev(headerPtr) == NULL)) {
  54.     sprintf(descriptionPtr,
  55.         "Header prevPtr is bogus: 0x%x.\n", List_Prev(headerPtr));
  56.     return FAILURE;
  57.     }
  58.     if ((List_Next(headerPtr) == LIST_NIL) || (List_Next(headerPtr) == NULL)) {
  59.     sprintf(descriptionPtr, 
  60.         "Header nextPtr is bogus: 0x%x.\n", List_Next(headerPtr));
  61.     return FAILURE;
  62.     }
  63.     itemPtr = List_First(headerPtr);
  64.     prevPtr = headerPtr;
  65.     index = 1;
  66.     while(List_IsAtEnd(headerPtr, itemPtr)) {
  67.     if (List_Prev(itemPtr) != prevPtr) {
  68.         sprintf(descriptionPtr, 
  69.         "Item %d doesn't point back at previous item.\n", index);
  70.         return FAILURE;
  71.     }
  72.     nextPtr = List_Next(itemPtr);
  73.     if ((nextPtr == LIST_NIL) || (nextPtr == NULL)) {
  74.         sprintf(descriptionPtr, 
  75.         "Item %d nextPtr is bogus: 0x%x.\n", index, nextPtr);
  76.         return FAILURE;
  77.     }
  78.     if (List_Prev(nextPtr) != itemPtr) {
  79.         sprintf(descriptionPtr,
  80.         "Next item doesn't point back at item %d.\n", index);
  81.         return FAILURE;
  82.     }
  83.     prevPtr = itemPtr;
  84.     itemPtr = nextPtr;
  85.     index++;
  86.     }
  87.     return SUCCESS;
  88. }
  89.  
  90.